;(function($){
	$.SelectUtils = $.SelectUtils || {};
	$.extend($.SelectUtils,{
		
		globalOptionTextMaxLength : 0, //全局option text最大长度(select 的option text如果太长,在IE下会看不到滚动条)
		/**
		 * 追加option
		 */
		appendOptions : function(datas,config){
//			例:	
//			config = {
//					selector : "select[id='selectId']", 					//下拉框selector
//					valueTextMap : {textKey : 'name#code',valueKey : 'id'},	//下拉框option 的value和text(可包含分隔符)在数据里的名称
//					textSeparator : "#",									//text 的分隔符(选填)
//					addData : true,											//是否将data数据本身设置到option(选填)
//					textMaxLength: 0										//显示的文本最大长度，0时为不限制
//			}
			
			var $select = $(config.selector), maxLen = config.textMaxLength || $.SelectUtils.globalOptionTextMaxLength;
			for (var d = 0; d < datas.length; d++) {
				var _text = "";
				//有分隔符
				if (config.textSeparator && config.textSeparator.length > 0) {
					var textNames = config.valueTextMap.textKey.split(config.textSeparator);
					if ($.isArray(textNames) && textNames.length > 0) {
						for (var vn = 0; vn < textNames.length; vn++) {
							_text += datas[d][textNames[vn]];
							if (vn != textNames.length - 1) 
								_text += config.textSeparator;
						}
					}
				}else{//无分隔符
					_text = datas[d][config.valueTextMap.textKey];
				}
				
				var displayText = maxLen > 0 ? _text.substr(0, maxLen) : _text;
				//创建option
				var option = $('<option value="' + datas[d][config.valueTextMap.valueKey] + '" title="' + _text + '">' + displayText + '</option>');
				//将数据设置到option
				if (config.addData && config.addData === true) 
					$select.append(option.data("objectData", datas[d]));
				else 
					$select.append(option);
			}
		},
		
		/**
		 * 设置option
		 */
		setOptions : function(datas,config){
//			例:	
//			config = {
//					selector : "select[id='selectId']", 					//下拉框selector
//					valueTextMap : {textKey : 'name#code',valueKey : 'id'},	//下拉框option 的value和text(可包含分隔符)在数据里的名称
//					textSeparator : "#",									//text 的分隔符(选填)
//					addData : true											//是否将data数据本身设置到option(选填)
//			}
			$.SelectUtils.removeAllOptions(config.selector);
			$.SelectUtils.appendOptions(datas,config);
		},
		
		/**
		 * 移除指定option
		 */
		removeOptions : function(config){
//			例:	
//			config = {
//					selector : "select[id='selectId']",		//下拉框selector
//					value : "",								//指定删除等于value的option(选填)
//					text : "",								//指定删除等于text的option(选填)
//					selected : true							//指定删除选中的option(选填)
//			}
			var $select = $(config.selector);
			$select.find('option').each(function(ind,option){
				var $option = $(option);
				//删除指定value的option
				if(config.value && config.value.length>0){
					if($option.val().toString() == config.value.toString()){
						$option.remove();
					}
				}
				//删除指定text的option
				if(config.text && config.text.length>0){
					if($option.text().toString() == config.text.toString()){
						$option.remove();
					}
				}
			})
			//删除selected的option
			if(config.selected && config.selected === true){
				$select.find('option:selected').remove();
			}
		},
		
		/**
		 * 移除全部option
		 */
		removeAllOptions : function(selector){
			$(selector).find('option').remove();
		},
		
		/**
		 * 获取选中option 的value
		 */
		getSelectedOptionValues : function(selector){
			var $select = $(selector);
			var options = $select.find('option:selected');
			var values = [];
			for(var i=0;i<options.length;i++){
				values.push(options[i].value);
			}
			return values;
		},
		
		/**
		 * 获取所有option 的value
		 */
		getAllOptionValues : function(selector){
			var $select = $(selector);
			var options = $select.find('option');
			var values = [];
			for(var i=0;i<options.length;i++){
				values.push(options[i].value);
			}
			return values;
		},
		
		/**
		 * 获取选中option 的data
		 */
		getSelectedOptionDatas : function(selector){
			var $select = $(selector);
			var options = $select.find('option:selected');
			var datas = [];
			for(var i=0;i<options.length;i++){
				datas.push($(options[i]).data("objectData"));
			}
			return datas;
		},
		
		/**
		 * 获取所有option 的data
		 */
		getAllOptionDatas : function(selector){
			var $select = $(selector);
			var options = $select.find('option');
			var datas = [];
			for(var i=0;i<options.length;i++){
				datas.push($(options[i]).data("objectData"));
			}
			return datas;
		}
		
	});
})(jQuery);